#include "key.h"
#define key1 PAin(15)
#define key2 PAin(14)
#define key3 PAin(13)
#define key4 PAin(12)
void keyInit(void){
	
	//1gpio时钟使能
	RCC_APB2PeriphClockCmd(KEY_PORT_RCC,ENABLE); //使能是GPIOA
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);	// 使能 AFIO 时钟
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);// 关闭JTAG 和 SWD 功能
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);	// 关闭JTAG 和 SWD 功能
	//2 key gpio初始化
	GPIO_InitTypeDef initDef;
	initDef.GPIO_Mode = GPIO_Mode_IPU; //推完输出
	initDef.GPIO_Pin = KEY1_PIN;//引脚pa0
	GPIO_Init(KEY_PORT,&initDef);  //初始化gpioc
	
	initDef.GPIO_Pin = KEY2_PIN;//引脚pa0
	GPIO_Init(KEY_PORT,&initDef);  //初始化gpioc
	
	initDef.GPIO_Pin = KEY3_PIN;//引脚pa0
	GPIO_Init(KEY_PORT,&initDef);  //初始化gpioc
	
	initDef.GPIO_Pin = KEY4_PIN;//引脚pa0
	GPIO_Init(KEY_PORT,&initDef);  //初始化gpioc
	
}
/*键按下以后返回值*/
u8 keyScan(u8 mode){
	//版本1： 太不优美
	/*
	if(key1==0){
		//延时消抖
		delay_ms(10);
		if(key1==0){
			return 1;
		}
	}else if(key2==0){
		//延时消抖
		delay_ms(10);
		if(key2==0){
			return 2;
		}
	}
	else if(key3==0){
		//延时消抖
		delay_ms(10);
		if(key3==0){
			return 3;
		}
	}
	else if(key4==0){
		//延时消抖
		delay_ms(10);
		if(key4==0){
			return 4;
		}
	}*/
	
	/*版本2：优化版本  问题：一直按着会被调用N多次 */
	/*if(key1==0|key2==0|key3==0|key4==0){
		//延时消抖
		delay_ms(10);
		if(key1==0) return 1;
		if(key2==0) return 2;
		if(key3==0) return 3;
		if(key4==0) return 4;
	}*/
	
	
	/*版本3：优化版本  问题：一直按着会被调用N多次 只调用一次 */
	/*static u8 flag = 1; //static只初始化一次
	if(flag && (key1==0||key2==0||key3==0||key4==0)){
		//延时消抖
		delay_ms(10);
		flag = 0;
		if(key1==0) return 1;
		if(key2==0) return 2;
		if(key3==0) return 3;
		if(key4==0) return 4;
	}else if(key1==1&&key2==1&&key3==1&&key4==1){
			flag = 1;
	}*/
	
	/*版本四：兼容一直按的情况*/
	static u8 flag = 1; //static只初始化一次
	if(mode) flag = 1;  //修改为1，后续每次都扫描
	if(flag && (key1==0||key2==0||key3==0||key4==0)){
		//延时消抖
		delay_ms(10);
		flag = 0;
		if(key1==0) return PRESSKEY1;
		if(key2==0) return PRESSKEY2;
		if(key3==0) return PRESSKEY3;
		if(key4==0) return PRESSKEY4;
	}else if(key1==1&&key2==1&&key3==1&&key4==1){
			flag = 1;
	}
	return 0;
}